package com.mastercard.assets.web.util.reportes;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCampania;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblPreimplementacion;
import com.mastercard.assets.jpa.TblProducto;
import com.mastercard.assets.jpa.TblTipoProducto;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.reporteForm;
import com.mastercard.assets.web.util.to.utilReporteUno;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class reportOne {

    public static List< utilReporteUno > generaReporte( List< TblCampania > campaigns, reporteForm form ) throws MasterCardException {

        List< utilReporteUno > reporte = new ArrayList< utilReporteUno >( ) ;
        
        for ( TblCampania camp : campaigns ) {//Inicia Barrido a lista de CAMPAÑAS

            if( camp.getBandera() != 1 ) {
                continue;
            }

            // arreglos a recorrer
            List< TblTipoProducto > listaTipoDeProductos = camp.getTblTipoProductos( ) ;
            List< TblProducto> listaProductos = camp.getTblProductos( ) ;
            List< TblPreimplementacion> listaPreimplementacion = camp.getTblPreimplementacions( ) ;
            List< TblAsset > listaAsset = new ArrayList< TblAsset >( ) ;
            // arreglos a recorrer
            int numeroDeProductos = listaProductos.size( ) ;
            
//            for( TblTipoProducto lTP : listaTipoDeProductos ){//Inicia Barrido a lista de TipoDeProductos
                
//                if( form.getTipoProducto( ) != 0 ){
//                    
//                    if( lTP.getCveTipoProducto( ) != form.getTipoProducto( ) )
//                        continue ;
//                    
//                }

            for( TblProducto prod : listaProductos ){//Inicia Barrido a lista de productos
                
                if( form.getProducto( ) != 0 ){
                    
                    if( form.getProducto( ) != prod.getCveProducto( ) )
                        continue ;
                    
                }

                //Inicia Barrido a lista de preimplementacion
                for( TblPreimplementacion preimplementacion : listaPreimplementacion ){

                    listaAsset = preimplementacion.getTblAssets( ) ;
                    
                    for( TblAsset asset : listaAsset ){//Inicia Barrido a lista de Assets
                        
                        if( form.getAsset( ) != 0 ){
                            
                            if( asset.getCveAsset( ) != form.getAsset( ) )
                                continue ;
                                
                        }                            
                        
                        utilReporteUno r = new utilReporteUno( ) ;
                        int paquetesDelAsset = paquetesPorAsset( asset, camp ) ;
                        float paqDeAssetPorProd = paquetesDelAsset/numeroDeProductos ;
                        
                        r.setPais( asset.getTblPais( ).getNombre( ) ) ;//Nombre del pais
                        r.setCuenta( camp.getTblCuenta( ).getNombre( ) ) ;//Nombre de la cuenta
                        r.setCampania( camp.getNombre( ) ) ;// nombre de la campaña
                        r.setCampaign( camp.getCveCampania( ) ) ;//id de la campaña
                        r.setTipoCampania( camp.getTblTipoCampania( ).getNombre( ) ) ;//Nombre del tipo de campaña
                        r.setProducto( prod.getNombre( ) ) ;//Nombre del producto
                        r.setTipoProducto( prod.getTblTipoProducto( ).getNombre( ) ) ;//Nombre del tipo de producto
                        r.setAsset( asset.getNombre( ) ) ;// Nombre del Asset
//                        r.setPaquetes( paqDeAssetPorProd ) ;// paquetes de asset por producto
                        r.setGdv( proporcionalPorAsset( listaAsset, camp.getGdvTotal( ), camp, asset ) ) ;                        
                        r.setRoi( proporcionalPorAsset( listaAsset, camp.getRoi( ), camp, asset ) ) ;
                        r.setRevenue( proporcionalPorAsset( listaAsset, camp.getRevenue( ), camp, asset ) ) ;
                        r.setResultado( proporcionalPorAsset( listaAsset, camp.getResultado( ), camp, asset ) ) ;
                        
                        reporte.add( r ) ;
                        
                    }//Termina Barrido a lista de Assets

                }//Termina Barrido a lista de preimplementacion

            }//Termina Barrido a lista de productos
            
//         }//FIN Barrido a lista de TipoDeProductos

        }//Termina Barrido a lista de CAMPAÑAS

        return reporte;
    }
    
    public static int paquetesPorAsset( TblAsset asset, TblCampania campaign ) throws MasterCardException {
        
        int paquetes = 0 ;
        List< TblPaquete > listaPaquetes = campaign.getTblPaquetes( ) ;
        
        for( TblPaquete p : listaPaquetes ) {
            
            if( p.getStatus() == 1 && p.getTblAsset( ).getCveAsset( ) == asset.getCveAsset( ) )
                paquetes += 1 ;               
        }
        
        return paquetes ;
        
    }
    
    public static BigDecimal proporcionalPorAsset( List< TblAsset > listaAssets, BigDecimal total, TblCampania campaign, TblAsset Asset )
            throws MasterCardException {
        
        BigDecimal proporcional ;
        
        double precioPaquetesAset = 0.0,
                costoCampaña = 0.0,
                porcentaje = 0 ;
        int cien = 100 ;
        List< TblProducto > productos = campaign.getTblProductos( ) ;
        List< TblPaquete > listaPaquetes = campaign.getTblPaquetes( ) ;
                
        for( TblAsset asset : listaAssets ){// INI barre assets de la campaña
            
            double costoPacksAsset = 0.0 ;
            
            for( TblPaquete p : listaPaquetes ) {// INI barre paquetes de campaña
             
                if( p.getStatus( ) == 1 && p.getTblAsset( ).getCveAsset( ) == asset.getCveAsset( ) ){
                    
                   if( p.getHabitacion( ) == 1 && p.getFondeado( ) == 1 ){
                       costoPacksAsset += asset.getCostoSenLoc( ) ;
                   }else
                       if( p.getHabitacion( ) == 2 && p.getFondeado( ) == 1 ){
                           costoPacksAsset += asset.getCostoDobLoc( ) ;
                       }else
                           if( p.getHabitacion( ) == 1 && p.getFondeado( ) == 2 ){
                               costoPacksAsset += asset.getCostoSenReg( ) ;
                           }else
                               if( p.getHabitacion( ) == 2 && p.getFondeado( ) == 2 ){
                                   costoPacksAsset += asset.getCostoDobReg( ) ;
                               }                    
                }
                    
            }// FIN barre paquetes de campaña
                                    
            costoCampaña += costoPacksAsset ;
            if( asset.getCveAsset( ) == Asset.getCveAsset( ) ){
                precioPaquetesAset = costoPacksAsset ;
            }            
            
        }// FIN barre assets de la campaña
        
        porcentaje = ( precioPaquetesAset * cien )/costoCampaña ;
        BigDecimal porcent = new BigDecimal( porcentaje ),
                cienXciento = new BigDecimal( cien ),
                numProductos = new BigDecimal( productos.size( ) ) ;
        
        
        proporcional = porcent.multiply( total ).divide( cienXciento )  ;
        
        proporcional = proporcional.divide( numProductos ) ;
        
        return proporcional ;
        
    }
    
    public static List< TblCampania > filtros( reporteForm f, List< TblCampania > campañas ) throws Exception{
        List< TblCampania > listaCampaña = campañas ;
        try {
            
            if( f.getPais( ) != 0 ) {// INI APLICA FILTRO PAIS
                List< TblCampania > listalocalPais = new ArrayList< TblCampania >( ) ;
                for( TblCampania camp : listaCampaña ){// ini BARRE listaCampaña
                    if( camp.getTblUsuario2( ).getTblPais( ).getCvePais( ) == f.getPais( ) )
                        listalocalPais.add( camp ) ;
                }// fin BARRE listaCampaña
                listaCampaña = listalocalPais ; 
            }// FIN APLICA FILTRO PAIS
            
            if( f.getCuenta( ) != 0 ) {// INI APLICA FILTRO CUENTA
                List< TblCampania > listalocalCuenta = new ArrayList< TblCampania >( ) ;
                for( TblCampania camp : listaCampaña ){// ini BARRE listaCampaña
                    if( camp.getTblCuenta( ).getCveCuenta( ) == f.getCuenta( ) )
                        listalocalCuenta.add( camp ) ;
                }// fin BARRE listaCampaña
                listaCampaña = listalocalCuenta ;
            }// FIN APLICA FILTRO CUENTA
            
            if( f.getTipoCampania( ) != 0 ) {// INI APLICA FILTRO TIPOCAMPAÑA
                List< TblCampania > listalocalTCampaña = new ArrayList< TblCampania >( ) ;
                for( TblCampania camp : listaCampaña ){// ini BARRE listaCampaña
                    if( camp.getTblTipoCampania( ).getCveTipoCampania( ) == f.getTipoCampania( ) )
                        listalocalTCampaña.add( camp ) ;
                }// fin BARRE listaCampaña
                listaCampaña = listalocalTCampaña ;
            }// FIN APLICA FILTRO TIPOCAMPAÑA
            
            if( f.getCampania( ) != 0 ) {// INI APLICA FILTRO CAMPAÑA
                List< TblCampania > listalocalCampaña = new ArrayList< TblCampania >( ) ;
                for( TblCampania camp : listaCampaña ){// ini BARRE listaCampaña
                    if( camp.getCveCampania( ) == f.getCampania( ) )
                        listalocalCampaña.add( camp ) ;
                }// fin BARRE listaCampaña
                listaCampaña = listalocalCampaña ;
            }// FIN APLICA FILTRO CAMPAÑA
            
            if( f.getDeAnio( ).trim( ).length( ) != 0 && f.getHastaAnio( ).trim( ).length( ) != 0 ) {// INI APLICA FILTRO FECHAS
                List< TblCampania > listalocalFechas = new ArrayList< TblCampania >( ) ;
                for( TblCampania camp : listaCampaña ){// ini BARRE listaCampaña
                    
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
                    Date ini = new Date( camp.getFechaIni( ).getTime( ) ),
                            fin = new Date( camp.getFechaFin( ).getTime( ) ),
                            capturaIni = sdf.parse( f.getDeAnio( ) ),
                            capturaFin = sdf.parse( f.getHastaAnio( ) );
                    
                    if( ( ini.after( capturaIni ) && ini.before( capturaFin ) ) &&
                            ( fin.after( capturaIni ) && fin.before( capturaFin ) ) ){
                        listalocalFechas.add( camp ) ;
                    }
                        
                }// fin BARRE listaCampaña
                listaCampaña = listalocalFechas ;
            }// FIN APLICA FILTRO CAMPAÑA
            
            
        }catch( Exception e ){
            e.printStackTrace( ) ;
        }   
            
            return listaCampaña ;
        }
    
    public static totalesReporteUno totales( List< utilReporteUno > reporte )throws Exception {
        
        String totalPaises = "",
                totalCuentas = "",
                totalCampañas = "",
                totalProductos = "",
                totalAssets = "" ;
        int paisesTotales = 0,
                cuentasTotales = 0,
                campañasTotales = 0,
                productosTotales = 0,
                assetsTotlaes = 0 ;
        
        BigDecimal totalROI = new BigDecimal( 0 ),
                totalRevenue = new BigDecimal( 0 ),
                totalGDV = new BigDecimal( 0 ),
                totalResultado = new BigDecimal( 0 ) ;
        
        totalesReporteUno tr = new totalesReporteUno( ) ;
                        
        for( utilReporteUno Report : reporte ){//INI barre arreglo de reportes
            
            int paisContado = totalPaises.indexOf( Report.getPais( ) ) ;
            
            if( paisContado < 0 ){
                totalPaises = " " + totalPaises + " " + Report.getPais( ) ;
                paisesTotales++ ;
            }
                        
            int cuentaContada = totalCuentas.indexOf( Report.getCuenta( ) ) ;
            
            if( cuentaContada < 0 ){
                totalCuentas = " " + totalCuentas + " " + Report.getCuenta( ) ;
                cuentasTotales++ ;
            }            
            
            int campaniaContada = totalCampañas.indexOf( Report.getCampania( ) ) ;
            
            if( campaniaContada < 0 ){
                totalCampañas = " " + totalCampañas + " " + Report.getCampania( ) ;
                campañasTotales++ ;
            }
            
            int assetContado = totalAssets.indexOf( Report.getAsset( ) ) ;
            
            if( assetContado < 0 ){
                totalAssets = " " + totalAssets + " " + Report.getAsset( ) ;
                assetsTotlaes++ ;
            }            
            
            int productoContado = totalProductos.indexOf( Report.getProducto( ) ) ;
            
            if( productoContado < 0 ){
                totalProductos = " " + totalProductos + " " + Report.getProducto( ) ;
                productosTotales++ ;
            }
            
            totalROI = totalROI.add( Report.getRoi( ) ) ;
            totalRevenue = totalRevenue.add( Report.getRevenue( ) ) ;
            totalGDV = totalGDV.add( Report.getGdv( ) ) ;
            totalResultado = totalResultado.add( Report.getResultado( ) ) ;
                        
            
        }// Fin Barre arreglo de reportes
        
        tr.setNumPaises( paisesTotales ) ;
        tr.setNumCuentas( cuentasTotales ) ;
        tr.setNumCampanias( campañasTotales ) ;
        tr.setNumProductos( productosTotales ) ;
        tr.setNumAssets( assetsTotlaes ) ;
        tr.setTotalROI( totalROI ) ;
        tr.setTotalREVENUE( totalRevenue ) ;
        tr.setTotalGDV( totalGDV ) ;
        tr.setToalRESULT( totalResultado ) ;
        
        return tr ;
        
    }
    
    public static List< utilReporteUno > generaReporteUno( reporteForm f ) throws MasterCardException{
        
        List< utilReporteUno > res = new ArrayList< utilReporteUno >( ) ;
        
        String sql = "SELECT "
                + "cp.cve_campania, p.nombre, cu.nombre, "
                + "tc.nombre, c.nombre, pd.nombre, "
                + "tpd.nombre, ase.nombre, count(paq.cve_paquete), "
                + "paq.habitacion, paq.fondeado, "
                + "c.fecha_ini, c.fecha_fin, ase.cve_asset, "
                + "c.roi, c.gdvTotal, c.revenue, "
                + "c.resultado, c.inversion "
                + "FROM "
                + "tbl_paquete as paq, "
                + "tbl_asset as ase, "
                + "tbl_campania_paquete as cp, "
                + "tbl_paises as p, "
                + "tbl_usuario as us, "
                + "tbl_campania as c, "
                + "tbl_cuenta as cu, "
                + "tbl_tipo_campania as tc, "
                + "tbl_producto as pd, "
                + "tbl_campania_producto as cpd, "
                + "tbl_tipo_producto as tpd "
                + "WHERE "
                + "paq.cve_asset = ase.cve_asset and cp.cve_paquete = paq.cve_paquete "
                + "and c.cve_cuenta = cu.cve_cuenta "
                + "and us.cve_usuario = c.cve_usuario_resp and p.cve_pais = us.cve_pais "
                + "and c.cve_campania = cp.cve_campania and c.cve_tipo_campania = tc.cve_tipo_campania "
                + "and c.cve_campania = cpd.cve_campania "
                + "and pd.cve_producto = cpd.cve_producto and pd.cve_tipo_producto = tpd.cve_tipo_producto "
                + "and c.`status`= 1 and c.bandera=1 " ;
        
        if (f.getPais( ) != 0) {

            sql = sql + " and p.cve_pais = " + f.getPais( ) ;

        }
        
        if( f.getCuenta( ) != 0 ){
            
            sql = sql +" and cu.cve_cuenta = " + f.getCuenta( ) + "" ;
            
        }
        
        if( f.getTipoCampania( ) != 0 ){
            
            sql = sql + " and tc.cve_tipo_campania = " + f.getTipoCampania( ) + "" ;
            
        }
        
        if( f.getTipoProducto( ) != 0 ){
            
            sql = sql + " and tpd.cve_tipo_producto = " + f.getTipoProducto( ) + "" ;
            
        }
        
        if( f.getProducto( ) != 0 ){
            
            sql = sql + " and pd.cve_producto = " + f.getProducto( ) + "" ;
            
        }
        
        if( f.getCampania( ) != 0 ){
            
            sql = sql + " and c.cve_campania = " + f.getCampania( ) + "" ;
            
        }
        
        if ( f.getAsset( ) != 0 ){
            
            sql = sql + " and ase.cve_asset = " + f.getAsset( ) + "" ;
            
        }
        
        if( f.getDeAnio( ).trim( ).length() > 0 && f.getHastaAnio( ).trim( ).length() > 0 ){
            
            sql = sql + " and (c.fecha_ini between '"+ f.getDeAnio( ) +"' and '"+ f.getHastaAnio( ) +"' and "
                    + "c.fecha_fin between '"+ f.getDeAnio( ) +"' and '"+ f.getHastaAnio( ) +"')" ;
            
        }else
            if( f.getDeAnio( ).trim( ).length( ) > 0 && f.getHastaAnio( ).equals("") ){
                
                sql = sql + " and c.fecha_ini >= '"+ f.getDeAnio( ) +"'" ;
                
            }else
                if( f.getHastaAnio( ).trim( ).length( ) > 0 && f.getDeAnio( ).equals("") ){
                    
                    sql = sql + " and c.fecha_fin <= '"+ f.getHastaAnio( ) +"'" ;
                    
                }
        
        sql = sql + " group by c.cve_campania, ase.cve_asset, pd.cve_producto, paq.habitacion, paq.fondeado" ;
        
        try{
            
            res = MasterCardDAO.datosParaReporteUno( sql ) ;
            
        }catch( Exception e ){
            
            e.printStackTrace( ) ;
            
        }
        
        return res;
        
    }
    
    public static List< utilReporteUno > completaReporteUno( List< utilReporteUno > res ) throws MasterCardException{
       
        float costoCampania = 0,
                costoAsset = 0,
                porcentaje = 0,
                laverage = 0,
                newLaverage = 0,
                lavT = 0 ,
                tarjetas = 0 ,
                newTarjetasT = 0 ;
        
        int campID = 0, assetID = 0 ;
        
        BigDecimal porcent = BigDecimal.ZERO,
                cien = new BigDecimal( 100 ),
                newROI = BigDecimal.ZERO,
                newGDV = BigDecimal.ZERO,
                newREV = BigDecimal.ZERO,
                newResult = BigDecimal.ZERO,
                roiT = BigDecimal.ZERO,
                gdvT = BigDecimal.ZERO,
                revT = BigDecimal.ZERO,
                resT = BigDecimal.ZERO ;
        
        ArrayList paises = new ArrayList( ),
                cuentas = new ArrayList( ),
                campas = new ArrayList( ),
                prods = new ArrayList( ),
                assets = new ArrayList( ) ;
        
        for( utilReporteUno lista : res ){// lista INI
            
            TblCampania campania = MasterCardDAO.getCampania( lista.getCampaign( ) ) ;
            TblAsset asset =  MasterCardDAO.findAssetById( lista.getCveAsset( ) ) ;
            List< TblPaquete > campPaquetes = campania.getTblPaquetes( ) ;
            if( campania.getTblTipoCampania( ).getCveTipoCampania( ) == 2 ){
                lista.setTarjetas( lista.getGdv( ).intValue( ) ) ;
                lista.setGdv( BigDecimal.ZERO ) ;
            }
            
            if( campID != lista.getCampaign( ) ){
                costoCampania = ObtieneCostoCampania( campania, campPaquetes ) ;
                laverage = lista.getInversion( )/costoCampania ;
                BigDecimal nRoi = new BigDecimal( 0 ) , precioCampana = new BigDecimal( Float.toString( costoCampania ) ) ;
                nRoi = lista.getRevenue( ).divide( precioCampana, 4, RoundingMode.UP) ;
                lista.setRoi( nRoi ) ;
                campID = lista.getCampaign( ) ;
                assetID = 0 ;
            }
            
            if( assetID != lista.getCveAsset( ) ){
                costoAsset = ObtieneCostoAsset(asset, campania, campPaquetes) ;
               
                porcentaje = (costoAsset * 100)/costoCampania ;
                porcent = new  BigDecimal( porcentaje ) ;
                
                newROI = porcent.multiply( lista.getRoi( ).setScale(4, BigDecimal.ROUND_HALF_UP) ).divide( cien ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                
                if( campania.getTblTipoCampania( ).getCveTipoCampania( ) != 2 ){
                    
                    newGDV = porcent.multiply( lista.getGdv( ).setScale(4, BigDecimal.ROUND_HALF_UP) ).divide( cien ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                    newTarjetasT = 0 ;
                    
                }else{
                    
                    newTarjetasT = ( porcentaje * lista.getTarjetas( ) )/100 ;
                    newGDV = BigDecimal.ZERO ;
                    
                }
                
                
                newREV = porcent.multiply( lista.getRevenue( ).setScale(4, BigDecimal.ROUND_HALF_UP) ).divide( cien ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                
                newResult = porcent.multiply( lista.getResultado( ).setScale(4, BigDecimal.ROUND_HALF_UP) ).divide( cien ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                
                newLaverage = (porcentaje * laverage)/100 ;
                
                roiT = roiT.add( newROI ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                if( campania.getTblTipoCampania( ).getCveTipoCampania( ) != 2 ){
                    gdvT = gdvT.add( newGDV ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                }else{
                    tarjetas += newTarjetasT ;
                }
                revT = revT.add( newREV ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                resT = resT.add( newResult ).setScale(4, BigDecimal.ROUND_HALF_UP) ;
                lavT +=  newLaverage ;
                
                assetID = lista.getCveAsset( ) ;
            }
            
            lista.setRoi( newROI ) ;
            lista.setGdv( newGDV ) ;
            lista.setRevenue( newREV ) ;
            lista.setResultado( newResult ) ;
            lista.setpLaverage(newLaverage ) ;
            lista.setTarjetas( newTarjetasT ) ;
            
            lista.setRoiT( roiT ) ;
            lista.setGdvT( gdvT ) ;
            lista.setRevenueT( revT ) ;
            lista.setResultadoT( resT ) ;
            lista.setpLavT( lavT ) ;
            lista.setTarjetasT( tarjetas ) ;
            
            boolean paisEsta = false,
                    cuentaEsta = false,
                    campEsta = false,
                    prodEsta = false,
                    assetEsta = false ;
        
            if( paises.isEmpty( ) ){
                paises.add( lista.getPais( ) ) ;
            }else{
                
                for( int i = 0 ; i < paises.size( ) ; i ++ ){// paises INI
                    if( paises.get( i ).equals( lista.getPais( ) ) ){
                        paisEsta = true ;
                        break ;
                    }
                }// paises FIN
                
                if( !paisEsta )
                    paises.add( lista.getPais( ) ) ;
                
            }
            
            if( cuentas.isEmpty( ) ){
                cuentas.add( lista.getCuenta( ) ) ;
            }else{
                
                for( int i = 0 ; i < cuentas.size( ) ; i ++ ){// cuentas INI
                    if( cuentas.get( i ).equals( lista.getCuenta( ) ) ){
                        cuentaEsta = true ;
                        break ;
                    }
                }// paises FIN
                
                if( !cuentaEsta )
                    cuentas.add( lista.getCuenta( ) ) ;
                
            }
            
            if( campas.isEmpty( ) ){
                campas.add( lista.getCampania( ) ) ;
            }else{
                
                for( int i = 0 ; i < campas.size( ) ; i ++ ){// campañas INI
                    if( campas.get( i ).equals( lista.getCampania( ) ) ){
                        campEsta = true ;
                        break ;
                    }
                }// campañas FIN
                
                if( !campEsta )
                    campas.add( lista.getCampania( ) ) ;
                
            }
            
            if( prods.isEmpty( ) ){
                prods.add( lista.getProducto( ) ) ;
            }else{
                
                for( int i = 0 ; i < prods.size( ) ; i ++ ){// prods INI
                    if( prods.get( i ).equals( lista.getProducto( ) ) ){
                        prodEsta = true ;
                        break ;
                    }
                }// paises FIN
                
                if( !prodEsta )
                    prods.add( lista.getProducto( ) ) ;
                
            }
            
            if( assets.isEmpty( ) ){
                assets.add( lista.getAsset( ) ) ;
            }else{
                
                for( int i = 0 ; i < assets.size( ) ; i ++ ){// paises INI
                    if( assets.get( i ).equals( lista.getAsset( ) ) ){
                        assetEsta = true ;
                        break ;
                    }
                }// paises FIN
                
                if( !assetEsta )
                    assets.add( lista.getAsset( ) ) ;
                
            }
            
            lista.setPaisT( paises.size( ) ) ;
            lista.setCuentaT( cuentas.size( ) ) ;
            lista.setCamapaniaT( campas.size( ) ) ;
            lista.setProductoT( prods.size( ) ) ;
            lista.setAssetT( assets.size( ) ) ;
        
    }// lista FIN
        
        return res ;
        
    }
    
    public static float ObtieneCostoCampania( TblCampania campania, List< TblPaquete > campPaquetes ) throws MasterCardException{
        float res = 0 ;
        
       for( TblPaquete paquete : campPaquetes ){// paquetes de campaña INI
           
          if( paquete.getHabitacion( ) == 1 && paquete.getFondeado( ) == 1 ){//SL
              res += paquete.getTblAsset( ).getCostoSenLoc( ) ;
          }else
              if( paquete.getHabitacion( ) == 1 && paquete.getFondeado( ) == 2 ){//SR
                  res += paquete.getTblAsset( ).getCostoSenReg( ) ;
              }else
                  if( paquete.getHabitacion( ) == 2 && paquete.getFondeado( ) == 1 ){//DL
                      res += paquete.getTblAsset( ).getCostoDobLoc( ) ;
                  }else
                      if( paquete.getHabitacion( ) == 2 && paquete.getFondeado( ) == 2 ){//DR
                          res += paquete.getTblAsset( ).getCostoDobReg( ) ;
                      }
           
       }// paquetes de campaña FIN
        
        return res ;
    }
    
    public static float ObtieneCostoAsset
            ( TblAsset asset, TblCampania campania, List< TblPaquete > campPaquetes ) throws MasterCardException{
        
        float res = 0 ;
        
        for( TblPaquete paquete : campPaquetes ){// paquetes de campaña INI
            
            if( paquete.getTblAsset( ).getCveAsset( ) == asset.getCveAsset( ) ){
               
                if( paquete.getHabitacion( ) == 1 && paquete.getFondeado( ) == 1 ){//SL
                    res += paquete.getTblAsset( ).getCostoSenLoc( ) ;
                }else
                    if( paquete.getHabitacion( ) == 1 && paquete.getFondeado( ) == 2 ){//SR
                        res += paquete.getTblAsset( ).getCostoSenReg( ) ;
                    }else
                        if( paquete.getHabitacion( ) == 2 && paquete.getFondeado( ) == 1 ){//DL
                            res += paquete.getTblAsset( ).getCostoDobLoc( ) ;
                        }else
                            if( paquete.getHabitacion( ) == 2 && paquete.getFondeado( ) == 2 ){//DR
                                res += paquete.getTblAsset( ).getCostoDobReg( ) ;
                            }
                                
            }
           
       }// paquetes de campaña FIN
        
        return res ;
        
    }
    
// fin de la clase
}
